home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / PowerMacOberon 1.2 / Source / Tools / In.Mod (.txt) < prev    next >
Oberon Text  |  1995-08-22  |  3KB  |  92 lines

  1. Syntax10.Scn.Fnt
  2. MODULE In;  (* HM 18 March 1994; mah Fehler in In.Char *)
  3. IMPORT Display, Viewers, Texts, TextFrames, Oberon;
  4. CONST
  5.     inval* = Texts.Inval;
  6.     name* = Texts.Name;
  7.     string* = Texts.String;
  8.     int* = Texts.Int;
  9.     real* = Texts.Real;
  10.     longReal* = Texts.LongReal;
  11.     char* = Texts.Char;
  12.     Done-: BOOLEAN;
  13.     s: Texts.Scanner;
  14.     text: Texts.Text;
  15.     startpos: LONGINT;        (* reminder for In.char *)
  16. PROCEDURE OpenText* (t: Texts.Text; pos: LONGINT);
  17. BEGIN
  18.     text := t; Texts.OpenScanner(s, t, pos); startpos := pos; Done := TRUE
  19. END OpenText;
  20. PROCEDURE Open*;
  21.     VAR t: Texts.Text; beg, end, time: LONGINT; v: Viewers.Viewer; f: Display.Frame;
  22. BEGIN
  23.     OpenText(Oberon.Par.text, Oberon.Par.pos); Texts.Scan(s);
  24.     IF (s.class = Texts.Char) & (s.c = "^") THEN
  25.         Oberon.GetSelection(t, beg, end, time);
  26.         IF time > 0 THEN OpenText(t, beg) END
  27.     ELSIF (s.class = Texts.Char) & (s.c = "*") THEN
  28.         v := Oberon.MarkedViewer();
  29.         f := v.dsc;
  30.         WHILE (f # NIL) & ((Oberon.Pointer.Y < f.Y) OR (Oberon.Pointer.Y >= f.Y + f.H)) DO f := f.next END;
  31.         IF (f # NIL) & (f IS TextFrames.Frame) THEN
  32.             OpenText(f(TextFrames.Frame).text, 0)
  33.         ELSE Done := FALSE
  34.         END
  35.     ELSE OpenText(Oberon.Par.text, Oberon.Par.pos)
  36. END Open;
  37. PROCEDURE Next* (): INTEGER;
  38.     VAR s1: Texts.Scanner;
  39. BEGIN
  40.     IF Done THEN
  41.         Texts.OpenScanner(s1, text, Texts.Pos(s));
  42.         Texts.Scan(s1); Done := ~s1.eot; RETURN s1.class
  43.     ELSE RETURN inval
  44.     END;
  45. END Next;
  46. PROCEDURE Int* (VAR n: INTEGER);
  47. BEGIN
  48.     IF Done THEN
  49.         Texts.Scan(s);
  50.         IF s.class = int THEN n := SHORT(s.i) ELSE n := 0; Done := FALSE END
  51. END Int;
  52. PROCEDURE LongInt* (VAR n: LONGINT);
  53. BEGIN
  54.     IF Done THEN
  55.         Texts.Scan(s);
  56.         IF s.class = int THEN n := s.i ELSE n := 0; Done := FALSE END
  57. END LongInt;
  58. PROCEDURE Real* (VAR r: REAL);
  59. BEGIN
  60.     IF Done THEN
  61.         Texts.Scan(s);
  62.         IF s.class = real THEN r := s.x ELSE r := 0; Done := FALSE END
  63. END Real;
  64. PROCEDURE LongReal* (VAR r: LONGREAL);
  65. BEGIN
  66.     IF Done THEN
  67.         Texts.Scan(s);
  68.         IF s.class = Texts.LongReal THEN r := s.y ELSE r := 0; Done := FALSE END
  69. END LongReal;
  70. PROCEDURE Char* (VAR ch: CHAR);
  71. BEGIN
  72.     IF Done THEN
  73.         IF startpos = Texts.Pos (s) THEN Texts.Read (s, s.nextCh) END;
  74.         ch := s.nextCh; Done := ~s.eot;
  75.         Texts.Read(s, s.nextCh)
  76. END Char;
  77. PROCEDURE Name* (VAR name: ARRAY OF CHAR);
  78. BEGIN
  79.     IF Done THEN
  80.         Texts.Scan(s);
  81.         IF s.class = Texts.Name THEN COPY(s.s, name) ELSE COPY("", name); Done := FALSE END
  82. END Name;
  83. PROCEDURE String* (VAR string: ARRAY OF CHAR);
  84. BEGIN
  85.     IF Done THEN
  86.         Texts.Scan(s);
  87.         IF s.class = Texts.String THEN COPY(s.s, string) ELSE COPY("", string); Done := FALSE END
  88. END String;
  89. BEGIN
  90.     Done := FALSE
  91. END In.
  92.